const { contextBridge, ipcRenderer } = require('electron')

contextBridge.exposeInMainWorld('versions', {
  node: 'electron',
  // axios初始化
  createAxios: () => ipcRenderer.invoke("createAxios"),
  // axios请求
  requestAxios: (params) => ipcRenderer.invoke("requestAxios", params),
  // 传输 token
  getToken: (token) => ipcRenderer.invoke("getToken", token),
  // 传输 userName
  getUserName: (userName) => ipcRenderer.invoke("getUserName", userName),
  // 获取请求头加密防止登录过期
  getEncrypt: () => ipcRenderer.invoke("getEncrypt"),
  // http请求基地址
  httpBaseUrlc: () => ipcRenderer.invoke('httpBaseUrl'),
  // 选择对话框文件
  fileSelect: (params) => ipcRenderer.invoke('fileUpload', params),
  // 设置下载位置
  setDownloadPath: () => ipcRenderer.invoke('setDownloadPath'),
  // 刚打开程序有下载项提示用户
  readyDownloads: () => ipcRenderer.invoke("readyDownloads"),
  // 刚打开程序有下载项开始下载
  readyDownloading: () => ipcRenderer.invoke("readyDownloading"),
  // 
  /**
   * GRPC 
   */
  // 获取上传文件列表
  getUploadListGRPC: () => {
    return ipcRenderer.invoke('getUploadList')
  },
  // 获取上传完成列表
  getFinishUploadListGRPC: () => {
    return ipcRenderer.invoke('getFinishUploadList')
  },
  // 开始上传文件
  addUploadGRPC: (params) => {
    return ipcRenderer.invoke('addUpload', params)
  },
  // 暂停上传文件
  pauseUploadGRPC: (params) => {
    return ipcRenderer.invoke('pauseUpload', params)
  },
  // 恢复上传文件
  resumeUploadGRPC: (params) => {
    return ipcRenderer.invoke('resumeUpload', params)
  },
  // 移除上传文件
  deleteUploadGRPC: (params) => {
    return ipcRenderer.invoke('deleteUpload', params)
  },
  // 根据id获取状态
  getStateByIDGRPC: (params) => {
    return ipcRenderer.invoke('getStateByID', params)
  },
  // 删除全部上传
  deleteAllUploadGRPC: () => {
    return ipcRenderer.invoke('deleteAllUpload')
  },
  // 暂停全部上传
  pauseAllUploadGRPC: (params) => {
    return ipcRenderer.invoke('pauseAllUpload', params)
  },
  // 恢复全部上传
  resumeAllUploadGRPC: () => {
    return ipcRenderer.invoke('resumeAllUpload')
  },
  // 设置传输设置
  setTransSettingGRPC: (params) => {
    return ipcRenderer.invoke('setTransSetting', params)
  },
  // 获取传输设置
  getTransSettingGRPC: () => {
    return ipcRenderer.invoke('getTransSetting')
  },
  /**
   * IPC下载
   */
  // electron下载文件
  downLoadFile: (params) => {
    return ipcRenderer.invoke('downLoadFile', params)
  },
  // 获取下载列表
  getDownLoadList: () => ipcRenderer.invoke('getDownloadList'),
  // 更新下载列表(服务端主动根据下载进度状态推送整个列表)
  sendDataList: (callback) => ipcRenderer.on('sendDataList', (_event, value) => callback(value)),
  // 更新下载列表(具体的下载项)
  updateDownLoadList: (callback) => ipcRenderer.on('download-info', (_event, value) => callback(value)),
  // 取消下载列表的监听
  unmountDownLoadList: () => {
    ipcRenderer.removeAllListeners('download-info')
    ipcRenderer.removeAllListeners('sendDataList')
    ipcRenderer.removeAllListeners('downloadAllProgress')
  },
  // 取消下载
  cancelDownLoad: (params) => ipcRenderer.invoke('download-cancel', params),
  // 暂停或恢复
  pauseOrResume: (params) => ipcRenderer.invoke('pauseOrResume', params),
  // 获取传输完成列表
  getTransferList: () => ipcRenderer.invoke('getTransferList'),
  // 清空传输完成列表
  clearTransferList: () => ipcRenderer.invoke('clearTransferList'),
  // 打开文件
  openFile: (params) => ipcRenderer.invoke('openFile', params),
  // 打开文件所在路径
  openFileInFolder: (params) => ipcRenderer.invoke('openFileInFolder', params),
  // 全部开始下载
  beginAllDownload: () => ipcRenderer.invoke('beginAllDownload'),
  // 全部暂停下载
  pauseAllDownload: () => ipcRenderer.invoke('pauseAllDownload'),
  // 全部取消下载
  removeAllDownload: () => ipcRenderer.invoke('removeAllDownload'),
  // 获取下载总进度
  downloadAllProgress: (callback) => ipcRenderer.on('downloadAllProgress', (_event, value) => callback(value)),
  // 重新下载保存数据
  redownloadStore: (params) => ipcRenderer.invoke('redownloadStore', params),
  // 刷新推送传输列表
  realTransferList: (callback) => ipcRenderer.on('realTransferList', (_event, value) => callback(value)),
  // 取消传输列表的监听
  unmountTransferList: () => ipcRenderer.removeAllListeners('realTransferList'),


  /**
   * 下载上传设置配置项
   */
  // 设置配置项
  setConfig: (params) => ipcRenderer.invoke("setConfig", params),
  // 获取配置项
  getConfig: () => ipcRenderer.invoke("getConfig")
})
